namespace Backoffice.Infrastructure.Secunity;


using BCrypt.Net;
//密码哈希器

using Backoffice.Application.Common.Interfaces;

public class PasswordHasher : IPasswordHasher
{
    // public string GenerateSalt()
    // {
    //     return Guid.NewGuid().ToString("N");
    // }

    // public string HashPassword(string password)
    // {
    //     if (string.IsNullOrEmpty(password))
    //     {
    //         throw new ArgumentException("Password cannot be null or empty.", nameof(password));
    //     }

    //     // 使用简单的哈希算法进行密码哈希处理
    //     // 注意：在实际应用中，应使用更安全的哈希算法，如 BCrypt 或 Argon2
    //     return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(password));
    // }

    // public bool VerifyHashedPassword(string hashedPassword, string providedPassword)
    // {
    //     if (string.IsNullOrEmpty(hashedPassword) || string.IsNullOrEmpty(providedPassword))
    //     {
    //         throw new ArgumentException("Hashed password and provided password cannot be null or empty.");
    //     }

    //     // 验证提供的密码是否与哈希密码匹配
    //     var hashedProvidedPassword = HashPassword(providedPassword);
    //     return hashedProvidedPassword == hashedPassword;
    // }

    public string GenerateSalt()
    {
        // 直接使用 BCrypt 类，无需 BCrypt.Net 前缀
        return BCrypt.GenerateSalt();
    }

    public string HashPassword(string password)
    {
        return BCrypt.HashPassword(password);
    }

    public bool VerifyHashedPassword(string hashedPassword, string providedPassword)
    {
        return BCrypt.Verify(providedPassword, hashedPassword);
    }
}
